package com.yunxi.module.infra.service.file;

import com.yunxi.framework.common.pojo.PageResult;
import com.yunxi.module.infra.framework.file.core.client.FileClient;
import com.yunxi.module.infra.model.file.FileConfigDO;
import com.yunxi.module.infra.vo.admin.file.config.FileConfigPageReqVO;
import com.yunxi.module.infra.vo.admin.file.config.FileConfigSaveReqVO;

/**
 * <p>
 * 文件配置 Service 接口
 * </p>
 *
 * @author lidy
 * @since 2024-05-18
 */
public interface FileConfigService {

    /**
     * 获得 master 文件客户端
     *
     * @return 文件客户端
     */
    FileClient getMasterFileClient();

    /**
     * 获得文件配置分页列表
     *
     * @param pageReqVO 分页查询参数
     * @return 文件配置分页列表
     */
    PageResult<FileConfigDO> getFileConfigPage(FileConfigPageReqVO pageReqVO);

    /**
     * 测试文件配置是否正确
     *
     * @param configId 文件配置 ID
     * @return 文件 URL
     */
    String testFileConfig(Long configId) throws Exception;

    /**
     * 根据配置 ID 获得配置
     *
     * @param configId 配置 ID
     * @return 配置信息
     */
    FileClient getFileClient(Long configId);

    /**
     * 获得文件配置
     *
     * @param configId 配置 ID
     * @return 配置信息
     */
    FileConfigDO getFileConfig(Long configId);

    /**
     * 删除文件配置
     *
     * @param configId 配置编号
     */
    void deleteFileConfig(Long configId);

    /**
     * 更新文件配置
     *
     * @param updateReqVO 文件配置信息
     */
    void updateFileConfig(FileConfigSaveReqVO updateReqVO);

    /**
     * 创建文件配置
     *
     * @param createReqVO 文件配置信息
     * @return 配置编号
     */
    Long createFileConfig(FileConfigSaveReqVO createReqVO);

    /**
     * 更新文件配置为主配置
     *
     * @param configId 配置编号
     */
    void updateFileConfigMaster(Long configId);
}
